<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <title>Document</title>
  <script src="./MyPromise.js"></script>
</head>

<body>
  <!-- 手写Promise -->

  <script>
    let p1 = new MyPromise((resolve, reject) => {
      // resolve(1)
      // reject(2)

      setTimeout(() => {
        resolve(1)
      }, 3000)
    });

    // 直接创建一个成功的Promise
    // Promise的静态方法
    const p2 = MyPromise.resolve(2)
    const p3 = MyPromise.resolve(3)
    const p4 = MyPromise.reject("没钱")

    // all 传入promis数组，等待所有的promise都成功后，返回一个新的promise
    // 包含前面所有的结果
    // const p5 = MyPromise.all([p1, p2, p3, p4]);
    // p5.then(data => console.log("data:", data))

    // 传入promise数组，只要有一个fullfilled，就立即返回
    const p5 = MyPromise.race([p1, p2, p3]);
    p5.then(data => console.log("data:", data))


  </script>


  <!-- <script>
    let p1 = new MyPromise((resolve, reject) => {
      // resolve(1)
      // reject(2)

      setTimeout(() => {
        resolve(1)
      }, 4000)
    });

    const p11 = p1.then(function (data1) {
      console.log(data1);
      return data1 + 1
    }, function (err) {
      console.log(err);
    })
    const p12 = p11.then(data2 => {
      console.log("data2:", data2);
      // return data2 + 2
      throw new Error("这是一个错误")
    })
    // const p13 = p12.then(data3 => {
    //   console.log("data3:", data3);
    // }, err => {
    //   console.log("err:", err);
    // })
    const p13 = p12.then(data3 => {
      console.log("data3:", data3);
    })
    p13.catch(err => console.log(err))
  </script> -->



  <!-- <script>
    let p = new Promise((resolve, reject) => {
      // console.log("xxx");
      // resolve("包包")
      // reject("没钱")

      setTimeout(() => {
        reject(1)
      }, 3000)
    });

    p.then(function (data) {
      console.log("ok1");
      return data+1
    }, function (err) {
      console.log("bad1");
    })
    p.then(function (data) {
      console.log("ok2");
    }, function (err) {
      console.log("bad2");
    })
  </script> -->








  <script>
    // p默认是处于pending状态
    // 调用resolve，让p处于fulfilled
    // 调用reject，让p处于rejected
    // let p = new Promise((resolve, reject) => {
    //   // 包包叫终值  value  成功的结果
    //   // resolve("包包")

    //   // 没钱是拒因  reason  失败的结果
    //   // reject("没钱")

    //   setTimeout(() => {
    //     resolve(1)
    //     // reject("没钱")
    //   }, 3000)
    // });

    // let p11 = p.then(function (data) {
    //   console.log(data);
    // }, function (err) {
    //   console.log(err);
    // })

    // then的返回值是一个新的promise
    // let p11 = p.then(data => {
    //   return data + 1
    // })

    // let p12 = p11.then(data => {
    //   return data + 2
    // })
    // let p13 = p12.then(data => {
    //   console.log("data:", data);
    // })
  </script>
</body>

</html>